1889B - Doremy's Connecting Plan - CodeForces Solution


constructive algorithms greedy math sortings *1700

Please click on ads to support us..

C++ Code:

// #include<bits/stdc++.h>
// using namespace std;
// #define int long long
// #define MAX 1e6+1
// class disjointSet{
//     vector<int> rank,parent,size;
// public:
//     disjointSet(int n){
//         rank.resize(n+1,0);//for both 0based and 1 based indexing
//         parent.resize(n+1);
//         size.resize(n+1);
//         for(int i=0;i<=n;i++){
//             parent[i]=i;
//             size[i]=1;
//         }
//     }
//     int findupar(int node){//finds the ultimate parent//O(4alpha)==constant
//         if(node==parent[node]){
//             return node;
//         }
//         else{
//             return parent[node]=findupar(parent[node]);
//         }
//     }
//     void unionbyrank(int u,int v){//O(4alpha)==constant
//         int ulpu=findupar(u);
//         int ulpv=findupar(v);
//         if(ulpv==ulpu){
//             return;
//         }
//         if(rank[ulpu]<rank[ulpv]){
//             parent[ulpu]=parent[ulpv];
//         }
//         else if(rank[ulpu]>rank[ulpv]){
//             parent[ulpv]=parent[ulpu];
//         }
//         else{
//             parent[ulpv]=parent[ulpu];
//             rank[ulpu]++;
//         }
//     }
//     void unionbysize(int u,int v){//O(4alpha)==constant
//         int ulpu=findupar(u);
//         int ulpv=findupar(v);
//         if(ulpv==ulpu){
//             return;
//         }
//         if(size[ulpu]<size[ulpv]){
//             parent[ulpu]=ulpv;
//             size[ulpv]+=size[ulpu];
//         }
//         else{
//             parent[ulpv]=ulpu;
//             size[ulpu]+=size[ulpv];
//         }
//     }
// };
// bool cmp(const pair<int, int>& a,const pair<int, int>& b){
//     if (a.first != b.first)
//         return (a.first < b.first);
//     else
//         return (a.second > b.second);
// }
// int mod_power(int x,int y,int m){//for calculating inverse through this check that m is prime x is indivisible by m and then a^(m-2)mod m=(a^-1)mod m
//     int res=1;//put y=m-2 to get inverse mod
//     while(y>0){
//         if(y%2==1){
//             res=(res*1LL*x)%m;
//             y--;
//         }
//         else{
//             x=(x*1LL*x)%m;
//             y/=2;
//         }
//     }
//     return res;
// }
// //vector<int> prime(MAX);
// //void SieveOfEratosthenes(){
//     //prime[0]=1;
//     //for(int i=0;i<MAX;i++){
//         //prime[i]=1;
//     //}
//     //for (int p = 2; p * p <= MAX; p++) {
//         //if (prime[p] == true) {
//             //for (int i = p * p; i <= MAX; i += p)
//                 //prime[i] = false;
//         //}
//     //}
// //}
// //vector<int> smp(MAX);
// //void spf(){
// //	smp[0]=1;
// //	for(int i=1;i<MAX;i++){
// //		smp[i]=i;
// //	}
// //	for(int i=2;i*i<MAX;i++){
// //		if(smp[i]==i){
// //			for(int k=i*i;k<MAX;k=k+i){
// //				if(smp[k]==k){
// //					smp[k]=i;
// //				}
// //			}
// //		}
// //	}
// //}
// signed main(){
//     ios_base::sync_with_stdio(false);
//     cin.tie(NULL);
//     int t;
//     cin>>t;
//     for(int j=0;j<t;j++){
//         int n,c;
//         cin>>n>>c;
//         vector<int> vec(n);
//         int sum=0;
//         for(int i=0;i<n;i++){
//             cin>>vec[i];
//             sum+=vec[i];
//         }
//         if(sum<n*c){
//             cout<<"No"<<endl;
//             continue;
//         }
//         set<pair<int,int>> s;
//         for(int i=0;i<n;i++){
//             s.insert({i+1,vec[i]});
//         }
//         int k=n-1;
//         bool flag=true;
//         while(s.size()>1){
//             auto it=s.begin();
//             auto it1=s.end();
//             it1--;
//             it=it1;
//             it1--;
//             k=it1->first;
//             if(k*c<=sum-it->second){
//                 s.erase(it);
//                 sum-=it->second;
//             }
//             else{
//                 it1++;
//                 k=it1->first;
//                 it--;
//                 if(k*c<=sum-it->second){
//                     s.erase(it);
//                     sum-=it->second;
//                 }
//                 else{
//                     flag=false;
//                     break;
//                 }
//             }
//         }
//         if(flag){
//             cout<<"Yes"<<endl;
//         }
//         else{
//             cout<<"No"<<endl;
//         }
//     }
//     return 0;
// }
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define MAX 1e6+1
class disjointSet{
    vector<int> rank,parent,size;
public:
    disjointSet(int n){
        rank.resize(n+1,0);//for both 0based and 1 based indexing
        parent.resize(n+1);
        size.resize(n+1);
        for(int i=0;i<=n;i++){
            parent[i]=i;
            size[i]=1;
        }
    }
    int findupar(int node){//finds the ultimate parent//O(4alpha)==constant
        if(node==parent[node]){
            return node;
        }
        else{
            return parent[node]=findupar(parent[node]);
        }
    }
    void unionbyrank(int u,int v){//O(4alpha)==constant
        int ulpu=findupar(u);
        int ulpv=findupar(v);
        if(ulpv==ulpu){
            return;
        }
        if(rank[ulpu]<rank[ulpv]){
            parent[ulpu]=parent[ulpv];
        }
        else if(rank[ulpu]>rank[ulpv]){
            parent[ulpv]=parent[ulpu];
        }
        else{
            parent[ulpv]=parent[ulpu];
            rank[ulpu]++;
        }
    }
    void unionbysize(int u,int v){//O(4alpha)==constant
        int ulpu=findupar(u);
        int ulpv=findupar(v);
        if(ulpv==ulpu){
            return;
        }
        if(size[ulpu]<size[ulpv]){
            parent[ulpu]=ulpv;
            size[ulpv]+=size[ulpu];
        }
        else{
            parent[ulpv]=ulpu;
            size[ulpu]+=size[ulpv];
        }
    }
};
bool cmp(const pair<int, int>& a,const pair<int, int>& b){
    if (a.first != b.first)
        return (a.first < b.first);
    else
        return (a.second > b.second);
}
int mod_power(int x,int y,int m){//for calculating inverse through this check that m is prime x is indivisible by m and then a^(m-2)mod m=(a^-1)mod m
    int res=1;//put y=m-2 to get inverse mod
    while(y>0){
        if(y%2==1){
            res=(res*1LL*x)%m;
            y--;
        }
        else{
            x=(x*1LL*x)%m;
            y/=2;
        }
    }
    return res;
}
//vector<int> prime(MAX);
//void SieveOfEratosthenes(){
    //prime[0]=1;
    //for(int i=0;i<MAX;i++){
        //prime[i]=1;
    //}
    //for (int p = 2; p * p <= MAX; p++) {
        //if (prime[p] == true) {
            //for (int i = p * p; i <= MAX; i += p)
                //prime[i] = false;
        //}
    //}
//}
//vector<int> smp(MAX);
//void spf(){
//	smp[0]=1;
//	for(int i=1;i<MAX;i++){
//		smp[i]=i;
//	}
//	for(int i=2;i*i<MAX;i++){
//		if(smp[i]==i){
//			for(int k=i*i;k<MAX;k=k+i){
//				if(smp[k]==k){
//					smp[k]=i;
//				}
//			}
//		}
//	}
//}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    cin>>t;
    for(int j=0;j<t;j++){
        int n,c;
        cin>>n>>c;
        vector<int> vec(n),pre(n);int tot=0;
        for(int i=0;i<n;i++){
            cin>>vec[i];
            tot+=vec[i];
            pre[i]=tot;
        }
        bool flag=true;
        int ans=0;
        // for(int i=n-1;i>=1;i--){
        //     if(vec[i]+vec[0]>=(i+1)*c){
        //         ans=i;
        //     }
        // }
        int sum=vec[0];
        // for(int i=0;i<=ans;i++){
        //     sum+=vec[i];
        // }
        while(ans<n-1){
            int l=ans;
            for(int i=ans+1;i<n;i++){
                if(sum+vec[i]>=(i+1)*c){
                    ans=i;
                    break;
                }
            }
            if(ans==l){
                flag=false;
                break;
            }
            else{
                sum=pre[ans];
            }
        }
        if(flag){
            cout<<"Yes"<<endl;
        }
        else{
            cout<<"No"<<endl;
        }
    }
    return 0;
}


Comments

Submit
0 Comments
More Questions

1663D - Is it rated - 3
1311A - Add Odd or Subtract Even
977F - Consecutive Subsequence
939A - Love Triangle
755A - PolandBall and Hypothesis
760B - Frodo and pillows
1006A - Adjacent Replacements
1195C - Basketball Exercise
1206A - Choose Two Numbers
1438B - Valerii Against Everyone
822A - I'm bored with life
9A - Die Roll
1430B - Barrels
279B - Books
1374B - Multiply by 2 divide by 6
1093B - Letters Rearranging
1213C - Book Reading
1468C - Berpizza
1546B - AquaMoon and Stolen String
1353C - Board Moves
902A - Visiting a Friend
299B - Ksusha the Squirrel
1647D - Madoka and the Best School in Russia
1208A - XORinacci
1539B - Love Song
22B - Bargaining Table
1490B - Balanced Remainders
264A - Escape from Stones
1506A - Strange Table
456A - Laptops